/*
 * Departamento de Ciência da Computação
 * Tradutores 02/2009 - turma A
 * Professor Marco Aurélio
 * Alunos: Danilo Gaby Andersen Trindade - 06/82039
 *         Alex Rodrigo de Oliveira      - 06/30403
 */

#ifndef _TIPOS_H
#define _TIPOS_H

#include <string>
#include <vector>


/**
 * Uma instrução de bytecode.
 */
struct op {
    int16_t cod, rs, a1, a2;
};


/**
 * O conjunto de instruções de uma função.
 */
struct box : std::vector<op> {
    int32_t framesize;
};


/**
 * Um registrador que guarda os valores das variável e o tipo delas.
 */
struct reg {
    char tp;
    int64_t val;
};


/**
 * Estrutura que contém os registradores de cada instância de uma função.
 */
struct frame : std::vector<reg> {
    int32_t pc;
    box *fn;
};


/**
 * Um identificador guardado na tabela de símbolos junto com a indicação de qual
 * seu registrador correspondente no frame.
 */
struct symbol {
    std::string lex;
    int16_t pos;
};


/**
 * A tabela de símbolos de cada função.
 */
struct table : std::vector<symbol> {
    int find(std::string id);
};


#endif /* _TIPOS_H */
